package com.fary.core.type;

import java.util.Set;

public interface AnnotationMetadata extends ClassMetadata, AnnotatedTypeMetadata {

	/**
	 * 获取当前类上所有的注解的全类名
	 */
	Set<String> getAnnotationTypes();

	/**
	 * 获取当前类上指定注解的注解类型
	 * 比如：@Component 的注解类型就是 @Indexed
	 * 比如：@Service 的注解类型就是 @Component和@Indexed
	 */
	Set<String> getMetaAnnotationTypes(String annotationName);

	/**
	 * 是否包含指定注解
	 */
	boolean hasAnnotation(String annotationName);

	/**
	 * 判断注解类型自己是否被某个元注解类型所标注
	 * 比如：@Service 的注解类型就是 @Component，如果 metaAnnotationName 是 xx.xx.xx.Component 就会返回 true
	 * 比如：比如我只需要传递 xx.xx.xx.@Component 注解 如果返回 ture 就代表了是一个标准的 Bean
	 */
	boolean hasMetaAnnotation(String metaAnnotationName);

	/**
	 * 类中只要有方法标注有指定注解，就返回true
	 */
	boolean hasAnnotatedMethods(String annotationName);

	/**
	 * 返回所有的标注有指定注解的 方法 元数据
	 */
	Set<MethodMetadata> getAnnotatedMethods(String annotationName);

}